RDSのGeneral Purpose (SSD)対応をベンチマークしてみた
はじめに
ウィスキー、シガー、パイプをこよなく愛する大栗です。 先日RDSでGeneral Purpose (SSD) Storageが選択可能になりました。
高速なSSDが使用可能になったためベンチマークしてみました。以前と同様にRDSのベンチバークをしてみました。
General Purpose (SSD) Storageとは?
General Purpose (SSD) Storageとは通称gp2と呼ばれ、最大で3,000 IOPSの性能を発揮でいるSSDストレージです。「最大」という所がポイントです。本来の性能はディスクサイズ(GB)の3倍のIOPSの性能になるのですが、I/O クレジットを貯める事でI/Oを3,000IOPSまでバーストできます。
ディスクの種類にはMagnetic (Standard)、General Purpose (SSD)、Provisioned IOPSがありますが、General Purpose (SSD)はコストパフォーマンスが良いディスクになります。特定の条件では、以下の様にMagnetic(Standard)より低価格の場合もあります。
ディスクの種類 | 価格(Single-AZ) (2014/10/19時点) | 価格(Multi-AZ) (2014/10/19時点) |
---|---|---|
Magnetic (Standard) | $153.984 / 月 | $276.864 / 月 |
General Purpose (SSD) | $141.312 / 月 | $282.624 / 月 |
Provisioned IOPS | $513.600 / 月 | $1027.200 / 月 |
※ディスクサイズ:1000 GB、平均負荷(I/O):100 IOPS、割当性能(I/O):3000 IOPS(Magneticは100〜200 IOPS)の場合
ベンチマーク環境
ベンチマークの種類
RDBMSのベンチマークで一般的なTPCのオンライントランザクション処理の指標である「TPC-C」を行います。 ベンチマーク用ツールはMySQLのOracle ACEである平塚氏が作成したJdbcRunnerのTPC-C簡易実装であるTiny TPC-Cを使用します。
使用データ
使用データは以下のコマンドでロードしています。
java JR scripts\tpcc_load.js -nAgents 8 -param0 100
"-param0"に100を指定しているので、データ件数は以下になります。
Table | Records |
---|---|
warehouse | 100 |
district | 1000 |
customer | 3,000,000 |
history | 3,000,000 |
item | 10,000,000 |
stock | 10,000,000 |
orders | 3,000,000 |
new_orders | 900,000 |
order_line | 30,000,000 (approx.) |
ベンチマーク対象
ベンチマーク対象は以下の以下の3タイプです。General Purpose (SSD)の性能(3000 IOPS)に準ずる様にストレージを設定しました。
ストレージ | ディスクサイズ | IOPS |
---|---|---|
Magnetic (Standard) | 100 GB | 100〜200 IOPS |
General Purpose (SSD) | 1000 GB | 3000 IOPS |
Provisioned IOPS | 100 GB | 3000 IOPS |
RDSは以下の状態で、ベンチマークを実施しています。
インスタンスクラス | DB Engine Version | 備考 |
---|---|---|
db.t2.small | MySQL 5.6.19 | 現在5.6.19はセキュリティ脆弱性の情報が出ています。 5.6.21以上を使用しましょう。 |
※RDSとベンチマーク用クライアントは同一Zoneに配置しています。
ベンチマーク内容
ベンチマークはTiny TPC-Cの多重度を以下の様に1、4、16、64で実行させてパフォーマンスを計測します。
java JR scripts\tpcc.js -nAgents 1
java JR scripts\tpcc.js -nAgents 4
java JR scripts\tpcc.js -nAgents 16
java JR scripts\tpcc.js -nAgents 64
結果
各々の多重度でベンチマークを計測します。
多重度:1
パフォーマンス
ディスクの種類 | Throughput(tps) | Response Time (90%tile) (ms) | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
New-Order | Payment | Order-Status | Delivery | Stock-Level | New-Order | Payment | Order-Status | Delivery | Stock-Level | |
Magnetic (Standard) | 2.8 | 2.8 | 0.3 | 0.3 | 0.3 | 264 | 113 | 104 | 704 | 1260 |
General Purpose (SSD) | 16.5 | 16.5 | 1.7 | 1.7 | 1.7 | 49 | 20 | 9 | 77 | 111 |
Provisioned IOPS | 16.6 | 16.6 | 1.7 | 1.7 | 1.7 | 47 | 19 | 9 | 77 | 105 |
負荷状況
ディスクの種類 | CPU使用率 | Read IOPS | Write IOPS |
---|---|---|---|
Magnetic (Standard) | 6.15 | 139.86 | 155.23 |
General Purpose (SSD) | 23.28 | 488.44 | 589.99 |
Provisioned IOPS | 23.94 | 488.18 | 635.72 |
多重度:4
パフォーマンス
ディスクの種類 | Throughput(tps) | Response Time (90%tile) (ms) | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
New-Order | Payment | Order-Status | Delivery | Stock-Level | New-Order | Payment | Order-Status | Delivery | Stock-Level | |
Magnetic (Standard) | 10.2 | 10.2 | 1.0 | 1.0 | 1.0 | 291 | 127 | 112 | 444 | 1618 |
General Purpose (SSD) | 43.4 | 43.4 | 4.3 | 4.3 | 4.3 | 105 | 43 | 21 | 164 | 193 |
Provisioned IOPS | 44.7 | 44.7 | 4.5 | 4.5 | 4.5 | 98 | 40 | 21 | 150 | 196 |
負荷状況
ディスクの種類 | CPU使用率 | Read IOPS | Write IOPS |
---|---|---|---|
Magnetic (Standard) | 15.92 | 302.94 | 361.81 |
General Purpose (SSD) | 54.90 | 1072.51 | 1230.34 |
Provisioned IOPS | 57.55 | 1101.47 | 1395.79 |
多重度:16
パフォーマンス
ディスクの種類 | Throughput(tps) | Response Time (90%tile) (ms) | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
New-Order | Payment | Order-Status | Delivery | Stock-Level | New-Order | Payment | Order-Status | Delivery | Stock-Level | |
Magnetic (Standard) | 15.3 | 15.3 | 1.5 | 1.5 | 1.5 | 751 | 400 | 274 | 1507 | 2809 |
General Purpose (SSD) | 61.4 | 61.4 | 6.1 | 6.1 | 6.1 | 224 | 81 | 39 | 367 | 293 |
Provisioned IOPS | 60.4 | 60.4 | 6.0 | 6.1 | 6.0 | 229 | 81 | 41 | 393 | 307 |
負荷状況
ディスクの種類 | CPU使用率 | Read IOPS | Write IOPS |
---|---|---|---|
Magnetic (Standard) | 21.69 | 362.30 | 358.94 |
General Purpose (SSD) | 75.62 | 1517.93 | 1565.11 |
Provisioned IOPS | 74.79 | 1493.98 | 1642.80 |
多重度:64
パフォーマンス
ディスクの種類 | Throughput(tps) | Response Time (90%tile) (ms) | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
New-Order | Payment | Order-Status | Delivery | Stock-Level | New-Order | Payment | Order-Status | Delivery | Stock-Level | |
Magnetic (Standard) | 16.2 | 16.2 | 1.6 | 1.6 | 1.6 | 3058 | 1579 | 890 | 5023 | 8031 |
General Purpose (SSD) | 61.2 | 61.2 | 6.1 | 6.1 | 6.1 | 1086 | 280 | 188 | 1774 | 1520 |
Provisioned IOPS | 58.5 | 58.5 | 5.8 | 5.8 | 5.8 | 1162 | 274 | 206 | 1909 | 1645 |
負荷状況
ディスクの種類 | CPU使用率 | Read IOPS | Write IOPS |
---|---|---|---|
Magnetic (Standard) | 22.46 | 351.85 | 239.09 |
General Purpose (SSD) | 78.95 | 1375.94 | 1392.88 |
Provisioned IOPS | 78.36 | 1363.88 | 1439.52 |
まとめ
General Purpose (SSD)とProvisioned IOPSは設定した性能通りほぼ同等の性能が出ています。Read IOPS + Write IOPS = 3,000程度で頭打ちとなりました。ディスクI/Oにボトルネックがある場合は、まずGeneral Purpose (SSD)で1000GB以上のディスクを設定するのがコスト的に良いと思います。
最後に
実は、最初の計測ではディスクサイズをケチってしまい、計測途中でI/O クレジットが枯渇してスループットが大幅に落ちたためディスクサイズを1000GBに変更して再計測しました。DBサーバの基本はディスクI/O処理ですので、基本的にgp2のディスクサイズは大きく取る事をお勧めします。 日次処理等で一時的な使用しかしない場合はディスクサイズを最小限にしてコストを抑える事が出来るかもしてません。しかし、I/O クレジットが枯渇した場合の対応を検討する事が必要ですので、余裕を持ったサイズを設定しましょう。